package com.holly.unit.deform.api;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.holly.unit.db.api.pojo.page.PageResult;
import com.holly.unit.deform.api.pojo.templet.DesignFormTempletDTO;
import com.holly.unit.deform.api.pojo.templet.DesignFormTempletRequest;

import javax.servlet.http.HttpServletResponse;
import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * 类描述: 表单设计器模板表 API
 *
 * @author fxr
 * @version 1.0.0
 * @date 2022/4/2 10:04
 */
public interface DeformTempletApi<T> {


    /**
     * 新增表单设计器模板表
     *
     * @param designFormTempletRequest) 表单设计器模板表对象
     * @author holly
     * @Date:   2022-03-03
     */
    void add(DesignFormTempletRequest designFormTempletRequest);

    /**
     * 删除表单设计器模板表
     *
     * @param designFormTempletRequest) 表单设计器模板表对象
     * @author holly
     * @date 2020/10/29 17:43
     */
    void del(DesignFormTempletRequest designFormTempletRequest);

    /**
     * 批量删除表单设计器模板表
     *
     * @param ids 表单设计器模板表对象id
     * @author holly
     * @date 2020/10/29 17:43
     */
    void delBatch(List<String> ids);

    /**
     * 批量删除表单设计器模板表
     * @param ids 逗号分割拼接的id
     */
    void delBatch(String ids);

    /**
     * 修改表单设计器模板表
     *
     * @param designFormTempletRequest) 表单设计器模板表对象
     * @author holly
     * @Date:   2022-03-03
     */
    void edit(DesignFormTempletRequest designFormTempletRequest);

    /**
     * 查询表单设计器模板表详情
     *
     * @param designFormTempletRequest) 表单设计器模板表id
     * @return 表单设计器模板表的详情
     * @author holly
     * @Date:   2022-03-03
     */
    DesignFormTempletDTO detail(DesignFormTempletRequest designFormTempletRequest);

    /***
     * 查询实体信息
     * @param queryWrapper 查询条件
     * @return
     */
    T fetchEntity(LambdaQueryWrapper<T> queryWrapper);

    /***
     * 通过id查询实体信息
     * @param id
     * @return
     */
    T fetchEntityById(Serializable id);

    /***
     * 通过编码查询实体信息
     * @param code
     * @return
     */
    T fetchEntityByCode(String code);

    /**
     * 获取表单设计器模板表列表
     *
     * @param designFormTempletRequest) 表单设计器模板表对象
     * @return 表单设计器模板表列表
     * @author holly
     * @Date:   2022-03-03
     */
    List<DesignFormTempletDTO> findList(DesignFormTempletRequest designFormTempletRequest);

    /**
     * 返回封装成可解析的options
     *
     *
     * @return 返回封装成可解析的options
     * @author holly
     * @Date:   2022-03-03
     */
    List<Map<String, Object>> findAnalysisOptions(String label,String value,Boolean useId,Boolean returnJson);



    /**
     * 获取表单设计器模板表列表（带分页）
     *
     * @param designFormTempletRequest) 查询条件
     * @return 带分页的列表
     * @author holly
     * @Date:   2022-03-03
     */
    PageResult<DesignFormTempletDTO> findPage(DesignFormTempletRequest designFormTempletRequest);

    /**
     * 获取表单设计器模板表列表（泛型分页）
     *
     * @param
     * @return 带分页的列表
     * @author holly
     * @Date:   2022-03-03
     */
    PageResult<T> page(T t, Map<String,String[]> paramMap);


    /**
     * 导出用户
     *
     * @param response httpResponse
     * @author holly
     * @Date:   2022-03-03
     */
    void export(HttpServletResponse response);

}
